package com.howso.cloud.common.crypto;

import cn.hutool.core.util.StrUtil;

/**
 * 加密综合对外api --AES简化版
 */
public class CrytoAESUtilSimple {
    private static final String CRYTO_PRI = "cryto.pri.";
    private static final String DECRYPT_PREFIX = "cryto.decrypt.identification";
    private static final String WORK_KEY_DEFAULT = "key.work.key";
    private static final String PRIVATE_KEY;
    private static final String PREFIX_STRING;
    private static final String WORK_KEY_STRING;
    static {
        String[] privateKeys = new String[0];
        String temp="";
        int i=0;
        while (temp!=null){
            temp=SettingUtils.get(CRYTO_PRI+i);
            if(temp!=null){
                privateKeys=KeyCryptoUtil.insert(privateKeys,temp);
            }
            i++;
        }
        PRIVATE_KEY=KeyCryptoUtil.priKeyAssemble(privateKeys);
        PREFIX_STRING=SettingUtils.get(DECRYPT_PREFIX);
        WORK_KEY_STRING=KeyCryptoUtil.decrypt(SettingBurstUtils.get(WORK_KEY_DEFAULT),PRIVATE_KEY);
    }
    
    /**
     * data 通用解密 判断前后缀是否包含，如果有则排除
     * @return
     */
    public static String decrypt(String data){
        if (data.startsWith(PREFIX_STRING)){
            if (StrUtil.isNotBlank(data)) {
                data = data.replace(PREFIX_STRING, "");
            } else {
                return data;
            }
        }
        return DataCryptoUtil.decrypt(data,WORK_KEY_STRING);
        
    }
    
    /**
     * data解密
     * @param data 密文
     * @param hasPrefix 是否包含前缀，如果包含则先处理，同时判断后缀
     * @return
     */
    public static String decrypt(String data, boolean hasPrefix){
        if (hasPrefix || data.startsWith(PREFIX_STRING)){
            if (StrUtil.isNotBlank(data)) {
                data = data.replace(PREFIX_STRING, "");
            } else {
                return data;
            }
        }
        return DataCryptoUtil.decrypt(data,WORK_KEY_STRING);
    }
    
    
    /**
     * data加密
     * @param data
     * @return
     */
    public static String encrypt(String data){
        return DataCryptoUtil.encrypt(data,WORK_KEY_STRING);
    }
    
    /**
     * data加密
     * @param data
     * @param hasPrefix 是否包含前缀 如果要包含。则加上前缀后缀，前缀申明加密参数，后缀带上密引
     * @return
     */
    public static String encrypt(String data, boolean hasPrefix){
        if(hasPrefix){
            return PREFIX_STRING+DataCryptoUtil.encrypt(data,WORK_KEY_STRING);
        }else {
            return DataCryptoUtil.encrypt(data,WORK_KEY_STRING);
        }
        
    }
}
